# 导入PyTorch库
import torch
# 导入PyTorch中的神经网络模块
import torch.nn as nn
# 导入torchsummary库，用于打印模型的摘要信息
from torchsummary import summary

# 定义一个继承自nn.Module的神经网络模型类
class Model(nn.Module):
    # 初始化模型的方法
    def __init__(self):
        # 调用父类的初始化方法
        super(Model, self).__init__()
        # 定义第一层线性层，输入特征数为3，输出特征数也为3
        self.l1 = nn.Linear(3,3)
        # 定义第二层线性层，输入特征数为3，输出特征数为2
        self.l2 = nn.Linear(3,2)
        # 定义输出层线性层，输入特征数为2，输出特征数为2
        self.out = nn.Linear(2,2)

    # 定义前向传播的方法
    def forward(self, x):
        # 输入数据通过第一层线性层后，应用sigmoid激活函数
        x = torch.sigmoid(self.l1(x))
        # 经过第一层后的数据通过第二层线性层后，应用ReLU激活函数
        x = torch.relu(self.l2(x))
        # 经过第二层后的数据通过输出层线性层
        x = self.out(x)
        # 输出层的结果应用softmax激活函数，用于多分类问题的概率分布
        out = torch.softmax(x,dim=-1)
        # 返回最终输出结果
        return out

# 当脚本作为主程序运行时执行以下代码
if __name__ == '__main__':
    # 实例化模型
    model = Model()
    # 创建一个5x3的随机张量作为输入数据
    x = torch.randn(5,3)
    # 将输入数据通过模型得到输出结果
    out = model(x)
    # 打印输出结果的形状
    print(out.shape)
    # 打印模型的摘要信息，包括每一层的输出形状和参数数量等信息
    summary(model, (3,),batch_size=5)